#include "book.h"

namespace book
{

fs::path Book::imgFilePath(const std::string &uriPath) const {

    // 获得图片所在的img目录的父目录，例如 a/b/img/c/d/e.png 则返回 a/b
    const book::IndexTree::Node *dirNode = indexTree_.findClosetExistingNodeByUri(uriPath);

    // dirNode 可以为空指针，空指针表示 img 目录直接位于文章目录
    if (!dirNode) {
        return srcDir_ / uriPath;
    }

    // 得到图片所在的img目录的父目录的文件系统路径相对于文章目录的相对路径
    const fs::path dirFsPath = dirNode->fsPath();

    // 得到图片路径相对于img目录的父目录的相对路径，这一路径的URI形式和文件系统形式是一致的
    const fs::path pathStartedByImg = fs::path(uriPath).lexically_relative(dirNode->uriPath());

    return srcDir_ / dirFsPath / pathStartedByImg;
}

} // namespace book
